#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<double,double>
const ll maxn = 2000 + 20;

pii p[maxn];
int main() {
    ios_base::sync_with_stdio(false);cin.tie(nullptr);
    vector<pii> ans;

    ll n; cin >> n;
    for (ll i = 0; i < n; ++i) {
        ll a, b;
        cin >> a >> b;
        p[i] = make_pair(a, b);
    }

    for (ll i = 0; i < n; ++i) {
        for (ll j = i+1; j < n; ++j) {
            double a, b, x, y;
            a = p[i].first, b = p[i].second;
            x = p[j].first, y = p[j].second;
            if(a*y == b*x) continue;
            double ox, oy, ox1, ox2, oy1, oy2;
            ox1 = b*(x*x+y*y) - y*(a*a + b*b);
            ox2 = 2*x*b - 2*y*a;
            ox = ox1/ox2;
            oy1 = a*(x*x + y*y) - x*(b*b + a*a);
            oy2 = 2*y*a - 2*x*b;
            oy = oy1/oy2;

//            cout << "circle :"<< ox << " " << oy << "\n";
            ans.emplace_back(ox,oy);
        }
    }
    sort(ans.begin(), ans.end());
    ans.insert(ans.begin(), make_pair(LLONG_MAX, LLONG_MAX));

    int k = 0;
    int tmp = 1;
    for (int i = 1; i < ans.size(); ++i) {
//        cout << "x:" << ans[i].first << "y:" << ans[i].second << "\n";
        if(ans[i] == ans[i-1]) {
            tmp++; k = max(k, tmp);
        }
        else tmp = 1;
//        if(abs(ans[i].first - ans[i-1].first)<1e-8 && abs(ans[i].second - ans[i-1].second)<1e-6) {
//            tmp++; k = max(k, tmp);
//        }
//        else tmp = 1;
    }

    cout << (1+sqrt(1+8*k))/2;
//    cout << k+1;
    return 0;
}

//#include <bits/stdc++.h>
//using namespace std;
//#define ll long long
//#define pii pair<ll,ll>
//const ll maxn = 2000 + 20;
//
//pii p[maxn];
//int main() {
//    ios_base::sync_with_stdio(false);cin.tie(nullptr);
//
//
//    ll n; cin >> n;
//    for (ll i = 0; i < n; ++i) {
//        ll a, b;
//        cin >> a >> b;
//        p[i] = make_pair(a, b);
//    }
//
//    ll maxx = 0;
//    for (ll i = 0; i < n; ++i) {
//        map<pii, ll> ans;
//        for (ll j = i+1; j < n; ++j) {
//            double a, b, x, y;
//            a = p[i].first, b = p[i].second;
//            x = p[j].first, y = p[j].second;
//            if(a*y == b*x) continue;
//            double ox, oy, ox1, ox2, oy1, oy2;
//            ox1 = b*(x*x+y*y) - y*(a*a + b*b);
//            ox2 = 2*x*b - 2*y*a;
//            ox = ox1/ox2;
//            oy1 = a*(x*x + y*y) - x*(b*b + a*a);
//            oy2 = 2*y*a - 2*x*b;
//            oy = oy1/oy2;
//
//            ll o1, o2;
//            o1 = (ll)(ox*1e6), o2 = (ll)(oy * 1e6);
//            ans[{o1, o2}]++;
//            maxx = max(maxx, ans[{o1,o2}]);
//        }
//    }
//
//    cout << maxx+1;
//    return 0;
//}